Dassault Cameo
Note: Users must procure and maintain valid licenses to integrate this commercial DE tool with the Istari Digital platform. Please contact your local IT administrator for assistance.
Supported Functions:
Getting Started
The Cameo integration provides support for Cameo Enterprise Architecture and Cameo Systems Modeler, allowing users to extract data from and modify .mdzip
files or connect directly to Teamwork Cloud (TWC) projects via a metadata link or file.
Versions Supported
Supported versions (2024x-refresh2
, 2022x-refresh2
or 2021x-refresh2
)
Exact functionality may vary by version, so please ensure you are using a compatible version of Cameo Enterprise Architecture or Cameo Systems Modeler. Istari Digital strives to maintain the same functionality across all supported versions, but some features may be version-specific.
Methods to Link to Istari Digital Platform
Upload: Yes (local *.mdzip)
Link: Yes (Teamwork Cloud)
Teamwork Cloud (TWC) Projects
Istari Digital can now connect directly to projects stored in Dassault Teamwork Cloud. Two operations are available and behave exactly like their local-file counterparts:
Function | Description |
---|---|
@istari:twc_extract | Extracts diagrams, blocks, requirements, stereotypes, etc. from a TWC project. |
@istari:twc_update_tags | Updates/clears/appends stereotype tagged-values inside a TWC project. |
1.1 Choosing a Connection Method
- Paste a TWC link in the Istari Web UI – the platform will create the required metadata file automatically, or
- Upload a metadata file (
*.istari_teamwork_cloud_metadata_mdzip
) that you create yourself (see next subsection).
1.2 Creating the metadata file manually
Save the following JSON as
my_project.istari_teamwork_cloud_metadata_mdzip
and upload it:
{
"project_id": "twcloud:/ac084d05-6bc2-4447-aa9f-51c9aa8f4679/6fc8e2dd-755d-40de-943f-d9d1ff716a2b",
"branch_name": "trunk",
"version": "12",
"server_name": "10.30.102.103"
}
Field requirements
project_id
orproject_name
– at least one is required (use only one if possible).server_name
– required (IP or DNS of the TWC server).branch_name
– optional (defaults to the project’s main branch).version
– optional (omit to grab the latest).
Tip: If you copy a URL from the TWC Web app (mdel://...?projectID=twcloud:/...&projectName=...) change every + in the projectName= segment to a space before using it as project_name in the metadata file.
1.3 Authentication – auth_secret.json
TWC uses BASIC authentication. Create a file named auth_secret.json on the same machine as the Istari Digital Client to create a Job.
{
"username": "your_username",
"password": "your_password"
}
Add it as an AuthSecret with the relationship identifier twc_auth_login.
from pathlib import Path
from istari_digital_client import FunctionAuthType, NewSource
def add_auth_source() -> NewSource:
if not Path("auth_secret.json").exists():
raise FileNotFoundError("auth_secret.json is missing")
secret = client.add_function_auth_secret(
path="auth_secret.json",
function_auth_type=FunctionAuthType.BASIC,
)
return NewSource(
revision_id=secret.revision.id,
relationship_identifier="twc_auth_login",
)
1.4 Using the TWC Functions
To use the TWC functions, you need to run a Job with the appropriate function name and parameters.
# 1. Add (or link) the TWC model
model = client.add_model(
"my_project.istari_teamwork_cloud_metadata_mdzip"
)
# 2. Launch an extract job
twc_extract_job = client.add_job(
model_id=model.id,
function="@istari:twc_extract",
tool_name="dassault_cameo",
tool_version="2022x Refresh2",
operating_system="Windows 11",
sources=[add_auth_source()], # << authentication
)
print("Started TWC extract:", twc_extract_job.id)
1.5 Running @istari:twc_update_tags
@istari:twc_update_tags
works exactly like the local-file
@istari:update_tags
function:
job = client.add_job(
model_id=model.id,
function="@istari:twc_update_tags",
tool_name="dassault_cameo",
tool_version="2022x Refresh2",
operating_system="Windows 11",
sources=[add_auth_source()], # << required for TWC login
parameters={"updates": updates} # << same schema as in the Cameo example below
)
@istari:twc_update_tags
is invoked identically to the existing update_tags
example—just change the function name and ensure sources=[add_auth_source()]
is supplied.
Result of an update on Teamwork Cloud
When you run @istari:twc_update_tags
the updated project is committed back to Teamwork Cloud as a new
version.
Istari then imports that commit as a new version of the same model ID—
no separate “updated_model.mdzip” artifact is produced.
What this means for you
• If you run another @istari:twc_extract
job on the model, the extraction
will operate on the freshly-committed version.
• There is nothing to download; simply re-fetch the model with
updated_model = client.get_model(model.id)
to work with the latest
revision inside Istari.
Need a full example of the updates array? Scroll down to the section titled “Using the update_tags Function”—the JSON and Python samples there apply unchanged to Teamwork Cloud projects.
Files Supported
The istari Digital Platform can extract from the following file types:
.mdzip
All other Cameo file types not supported at this time. Please submit a feature request if an important file type is not supported.
Example Files
-
Download Example TraceabilityModule: AdvancedTraceabilityModule.mdzip
-
Download Example Requirements: CategorizationRequirements.mdzip
Setup for Administrators
Prerequisites & Setup steps for administrators to configure the Cameo integration with the Istari Digital Platform.
Ensure that Cameo Enterprise Architecture or Cameo Systems Modeler (support versions) is installed on a Virtual Machine (VM) or standalone server alongside the Istari Digital Agent and the appropriate Istari Digital software. Verify that the installation is up to date with the latest patches and updates from Dassault.
License Notes for Admins
This integration supports both floating and node-locked licenses. For floating licenses, ensure that the license server is
properly configured and accessible from the machine running the Istari Digital Agent. The integration will attempt to check out a license from the first available server in the server_hosts
list specified in the module configuration file.
For node-locked licenses do not include the server_hosts key in module_config.json; the module will use the local license file instead of contacting a server.
Setup - Module (Version 3.0.0+)
Starting with cameo-module 3.0.0 and istari-agent 9.8.0+, the old configuration variables (cameo_installation_path
, server_hosts
, lmutil_executable_path
, license_name
) are deprecated. While they remain supported for backward compatibility, we strongly encourage using the new standardized configuration variables and the centralized istari_digital_agent_module_configurations
approach for module configuration.
Centralized Configuration (Recommended)
The Istari Agent is configured via the file istari_digital_config.yaml
. The Agent expects the file to be located at:
%LOCALAPPDATA%\istari_digital\
on Windows~/.config/istari_digital/
on RHEL/Ubuntu
Configure the Cameo module using the istari_digital_agent_module_configurations
section. The agent will pass this centralized configuration to the module. Note that Cameo supports version-specific configuration:
agent:
istari_digital_agent_module_configurations:
"@istari:dassault_cameo":
"2021x-refresh2":
"dassault_cameo_install_dir": "/path/to/cameo/2021x/installation/dir"
"dassault_cameo_license_server_hosts": ["27000@localhost", "28000@secondary.server.com"] # optional
"dassault_cameo_license_manager_executable_path": "/path/to/lmutil/executable" # optional
"dassault_cameo_license_name": "CameoEnterpriseArchitectureEnt" # optional
"2022x-refresh2":
"dassault_cameo_install_dir": "/path/to/cameo/2022x/installation/dir"
"dassault_cameo_license_server_hosts": ["27000@localhost", "28000@secondary.server.com"] # optional
"dassault_cameo_license_manager_executable_path": "/path/to/lmutil/executable" # optional
"dassault_cameo_license_name": "CameoEnterpriseArchitectureEnt" # optional
"2024x-refresh2":
"dassault_cameo_install_dir": "/path/to/cameo/2024x/installation/dir"
"dassault_cameo_license_server_hosts": ["27000@localhost", "28000@secondary.server.com"] # optional
"dassault_cameo_license_manager_executable_path": "/path/to/lmutil/executable" # optional
"dassault_cameo_license_name": "CameoEnterpriseArchitectureEnt" # optional
Legacy Configuration (module_config.json)
For backward compatibility, you can still use the legacy module_config.json
file located at {istari_agent_dir}\istari_modules\dassault_cameo\cameo_module_{version}\app\resources\module_config.json
:
{
"dassault_cameo_install_dir": "/path/to/cameo/installation/dir",
"dassault_cameo_license_server_hosts": ["27000@localhost", "28000@secondary.server.com"],
"dassault_cameo_license_manager_executable_path": "/path/to/lmutil/executable", // optional
"dassault_cameo_license_name": "CameoEnterpriseArchitectureEnt" // optional
}
This file contains essential configuration parameters for the module to function correctly.
Configuration Parameters
Each configuration parameter serves a specific purpose:
dassault_cameo_install_dir
: Specifies the absolute path where Cameo is installed on the machine. This is required for the module to locate and interact with the Cameo software.dassault_cameo_license_server_hosts
: (Optional) An array of license server connection strings, each in the format"PORT@SERVER"
(e.g.,["27000@localhost", "28000@secondary.server.com"]
). If not provided, the module will use the default configured license server or node-locked license. The module will attempt to check out a license from the first available server in the list.dassault_cameo_license_manager_executable_path
: (Optional) Path to thelmutil
executable for floating license management. If not provided, defaults to<dassault_cameo_install_dir>/lib/lmutil.exe
.dassault_cameo_license_name
: (Optional) The license name to check out. If not provided, defaults to"CameoEnterpriseArchitectureEnt"
.
Function Coverage and Outputs
The Cameo software can produce a number of artifacts extracted from the Cameo model. The table below describes each output artifact and its type.
New Enhancement: The @istari:extract function now includes Tags, Stereotypes, and Profiles for Blocks and Requirements. This helps users easily identify available tags and stereotypes for use with the update_tags
function.
Route | Coverage | Artifact Content Example |
---|---|---|
Function: @istari:extract: | Yes | |
Extract all diagrams - PNG | ||
Extract cameo blocks - JSON | ||
Extract cameo requirements - JSON | ||
Function: @istari:update_tags: | Yes | |
Input - update_tags_input - JSON |
Detailed SDK Reference
Prerequisite: Install Istari Digital SDK and initialize Istari Digital Client per instructions here
Step 1: Upload and Extract the File(s)
Upload the file as a model
model = client.add_model(
path="example.mdzip",
description="Cameo example model",
display_name="Cameo Model Name",
)
print(f"Uploaded base model with ID {model.id}")
Extract once you have the model ID
extraction_job = client.add_job(
model_id = model.id,
function = "@istari:extract",
tool_name = "dassault_cameo",
tool_version = "2022x Refresh2",
operating_system = "Windows 10",
)
print(f"Extraction started for model ID {model.id}, job ID: {extraction_job.id}")
Please choose appropriate tool_name, tool_version, and operating_system for your installation of this software.
Above is an example of how to call the function
Step 2: Check the Job Status
extraction_job.poll_job()
Step 3: Retrieve Results
Example
for artifact in model.artifacts:
output_file_path = f"c:\\extracts\\{artifact.name}"
if artifact.extension in ["txt", "csv", "md", "json", "html"]:
with open(output_file_path, "w") as f:
f.write(artifact.read_text())
else:
with open(output_file_path, "wb") as f:
f.write(artifact.read_bytes())
Using the update_tags Function
The update_tags
function allows users to programmatically update, append, or clear stereotype tagged-values (attributes/metadata) on elements within Cameo models. This is particularly useful for digital thread workflows where results from Istari Digital Platform workflows need to be saved back into Cameo Enterprise Architecture.
Function Overview
- Function Name:
@istari:update_tags
- Tool Name:
dassault_cameo
- Supported Versions:
2021x Refresh2
,2022x Refresh2
,2024x Refresh2
- Supported OS:
Windows 10 / 11
,Windows Server 2019 / 2022
Note: The update_tags
function supports updating tags on all types of Cameo elements, including Requirements, Blocks, Diagrams, and more. When tags on these elements are updated, any diagrams referencing these elements will automatically reflect the updated tag values upon opening the updated model in Cameo.
Input JSON Schema
The input JSON file specifies the elements and tags you want to update. Each JSON object in the array represents one element to update:
[
{
"element_id": "_2021x_2_38b206bc_1744829804820_164896_3864",
"replace_existing": true,
"tags": {
"VerificationStatus": "Fail",
"Logs": null
}
}
]
Schema Explanation:
element_id
(string, optional): Internal Cameo element ID. Recommended when element names are not unique.element_name
(string, optional): Human-readable name of the element. Either element_id or element_name is required.replace_existing
(boolean, optional, default=true):true
: Overwrites existing tag values.false
: Appends to multi-valued tags without overwriting existing values.
tags
(object, required): Key-value pairs representing the tags to update.- Set a tag value to null to clear it.
Example
Here's a complete example of how to use the update_tags function with the Istari Digital SDK:
Step 1: Upload the Cameo Model
model = client.add_model(
path="Table Example.mdzip",
)
print(f"Uploaded model with ID {model.id}")
Step 2: Define the Update Parameters
updates = [
# Example 1: Replace existing tags (default behavior)
{
# Using element_id for precise targeting
"element_id": "_2024x_2_abc12345_1750033427003_556537_1234",
"tags": {
"VerificationStatus": "Verified",
"Priority": "High",
"Owner": "John Doe"
}
},
# Example 2: Append to a multi-valued tag without overwriting existing values
{
# Using element_name for readability (ensure uniqueness)
"element_name": "System Requirement - Battery Life",
"replace_existing": False, # explicitly set to False to append
"tags": {
"RelatedDocuments": "Battery_Specifications_v2.pdf"
}
},
# Example 3: Clear existing tags by setting their values to null
{
"element_id": "_2024x_2_def67890_1750033427003_556537_5678",
"tags": {
"DeprecatedTag": None, # clears the existing value
"ObsoleteReference": None
}
},
# Example 4: Mixed operation (replace some tags, clear others)
{
"element_name": "Subsystem Block - Navigation",
"tags": {
"Status": "In Progress", # replaces existing value
"LastReviewed": None # clears existing value
}
},
# Example 5: Append multiple values to multi-valued tags
{
"element_id": "_2024x_2_xyz98765_1750033427003_556537_4321",
"replace_existing": False,
"tags": {
"Stakeholders": ["Alice Smith", "Bob Johnson"], # appends multiple stakeholders
"ReviewDates": ["2024-01-15", "2024-02-20"] # appends multiple dates
}
}
]
Explanation of Examples:
-
Example 1 (Replace by Default):
- Updates the tags VerificationStatus, Priority, and Owner. Existing values are overwritten.
-
Example 2 (Append):
- Adds a new document reference to the multi-valued tag RelatedDocuments without removing existing references.
-
Example 3 (Clear Tags):
- Clears the values of tags DeprecatedTag and ObsoleteReference by setting them explicitly to None.
-
Example 4 (Mixed Operation):
- Updates the tag Status with a new value and clears the tag LastReviewed.
-
Example 5 (Append Multiple Values):
- Appends multiple new entries to multi-valued tags Stakeholders and ReviewDates.
Step 3: Run the Update Job
job = client.add_job(
model_id=model.id,
function="@istari:update_tags",
tool_name="dassault_cameo",
tool_version="2022x Refresh2",
operating_system="Windows 11",
parameters={"updates": updates}
)
print(f"Update job started, job ID: {job.id}")
Step 4: Check Job Status & Retrieve Results
from time import sleep
from istari_digital_client import JobStatusName
# Wait for the job to complete
while True:
job_status = client.get_job(job.id).status.name
print(f"Current job status: {job_status}")
if job_status in (JobStatusName.COMPLETED, JobStatusName.FAILED):
break
sleep(5)
# Retrieve final job status
job = client.get_job(job.id)
if job.status.name == JobStatusName.COMPLETED:
print(f"Update job {job.id} completed successfully!")
# Retrieve the updated model version created by the update_tags function
updated_model = client.get_model(job.model.id)
else:
print(f"Update job {job.id} failed with status: {job.status.name.value}")
Troubleshooting
- For general Agent and Software Troubleshooting Click Here
- Missing Artifacts:
- 2.1 requirements.json: Check source file, are there requirements in the file? If not, refer to the software's manual for defining appropriate requirements.
- 2.2 diagram.png: Check source file, does it contain any diagram?
- Issues with update_tags function:
- Ensure the
element_id
orelement_name
matches exactly what's in the Cameo model. - Verify that the tags, stereotypes, and profiles exist in the model.
- Check the JSON schema carefully for syntax errors.
- Ensure the
- TWC authentication errors
• Verifyauth_secret.json
path and that it is attached withrelationship_identifier="twc_auth_login"
.
• Confirm the username/password by logging into TWC Web with the same credentials. - Cannot find project
• Double-checkproject_id
orproject_name
andserver_name
in the metadata file.
• If copied theproject_name
from URL, remember to convert+
to spaces.
FAQ
- Is this usable for other versions of Cameo Enterprise Architecture?
- Backwards compatibility with older versions of Cameo is not guaranteed and is not recommended by Dassault.
- Can I use
update_tags
to clear existing tags?- Yes. Set the tag value to
null
in your input JSON to clear the tag.
- Yes. Set the tag value to